iT邦幫忙

2022 iThome 鐵人賽

DAY 20
0
自我挑戰組

養爬蟲的人學爬蟲系列 第 20

【Day 20】帶上工具去Dcard去爬文(實戰Selenium 1/2)

  • 分享至 

  • xImage
  •  

閒聊

預期效果
透過Selenium成功開啟Dcard分頁(瀏覽器分頁),並用內鍵工具索取目前所有文章,將文章存在JSON檔案。

實作

  • 第一步我們需要先寫一個簡單的Selenium程式碼,讓Selenium去打開Dcard
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.dcard.tw/f')

https://ithelp.ithome.com.tw/upload/images/20221003/20145359hFZzgx9ugZ.jpg

這時候我們可以看看文章中是否有class元素可以讓我們爬取,確認好後就可以開始準備爬取了。
https://ithelp.ithome.com.tw/upload/images/20221003/20145359YOyLvZwcQb.png

  • 第二步,這裡可以用driver.find_element_by_class_name來定位,並且使用for-loop迴圈將回傳的list輸出。
    同時,我們也可以使用timesleep來讓程式碼暫停一點,使文章載入完成。(避免因為還沒載入完成就抓不到元素的情況)
  • 第三步,我們可以把文章的標題、連結和副標題也鎖定存在變數中。
    並且將結果存於一個dist裡面,用append到總結果中。
from selenium import webdriver
from time import sleep
if _name_ == '_main_'

    driver = webdriver.Chrome()
    driver.get('https://www.dcard.tw/f')
    sleep(2) #讓程式碼暫停0.5秒
    eles = driver.find_element_by_class_name('sc-afbc95aa-0')
    for ele in eles :
        result = {}
        title = ele.find_element_by_class_name('sc-afbc95aa-2').text
        href = ele.find_element_by_class_name('sc-afbc95aa-2').get_attribute('href')
        subtitle = ele.find_element_by_class_name('sc-5914a055-0').text
        result = {
            'title' : title #print(title)
            'href' : href #print(href)
            'subtitle' : subtitle #print(subtitle)
        }
        results.append(result)
    print(result)
    driver.quit() #關閉瀏覽器
  • 第四步,將文章資料存於JSON就完成了!
from selenium import webdriver
from time import sleep
import json

if _name_ == '_main_'
    driver = webdriver.Chrome()
    driver.get('https://www.dcard.tw/f')
    sleep(2) #讓程式碼暫停0.5秒
    eles = driver.find_element_by_class_name('sc-afbc95aa-0')
    for ele in eles :
        result = {}
        title = ele.find_element_by_class_name('sc-afbc95aa-2').text
        href = ele.find_element_by_class_name('sc-afbc95aa-2').get_attribute('href')
        subtitle = ele.find_element_by_class_name('sc-5914a055-0').text
        result = {
            'title' : title #print(title)
            'href' : href #print(href)
            'subtitle' : subtitle #print(subtitle)
        }
        results.append(result)
    print(result)
    with open('Dcard-articles.json', 'w', encoding='utf-8') as f:
        json.dump(results, f, indent=2,
                  sort_keys=True, ensure_ascii=False)
    driver.quit() #關閉瀏覽器

結語
今天試著用Selenium爬取了Dcard的文章,並且儲存起來。
明天要來試試看Selenium著名的功能:模擬使用者使用狀況。

明天!
【Day 21】在Dcard上自動向下捲動吧!(實戰Selenium 1/2)

參考資料
Selenium 函式庫


上一篇
【Day 19】動態網頁爬蟲-Selenium(2/2)
下一篇
【Day 21】在Dcard上自動向下捲動吧!(實戰Selenium 1/2)
系列文
養爬蟲的人學爬蟲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言